const { Controller } = require('egg');

class TagController extends Controller {
  async tagList() { // 获得标签列表
    //  1. 获得参数
    const { ctx, app } = this;
    const id = ctx.authUser.id;
    // 2. 查询数据库
    const list = await app.model.Tag.findAll({
      where: {
        user_id: id,
      },
      attrubutes: ['id', 'name'],
    });
    // 3. 返回结果
    ctx.success(list);
  }
  async tagAdd() { // 添加标签
    // 1. 参数验证和获取参数
    const { ctx, app } = this;
    const id = ctx.authUser.id;
    ctx.validate({
      tag: {
        type: 'string',
        required: true,
        desc: 'tag列表'
      }
    });
    let tagString = ctx.request.body.tag;
    // 2. 数据整理
    tagString = tagString.split(',').map(item => {
      return {
        name: item,
        user_id: id
      };
    });
    // 3. 操作数据库
    const result = await app.model.Tag.bulkCreate(tagString);
    if (result) {
      ctx.success(result);
    } else {
      ctx.fail('操作失败');
    }
  }
  async tagAddFriend() { // 添加指定好友的标签
    // 1. 参数验证和获取参数
    const { ctx, app } = this;
    const id = ctx.authUser.id;
    const friend_id = ctx.params.f_id;
    ctx.validate({
      tag: {
        type: 'string',
        required: true,
        desc: '标签'
      }
    });
    console.log(friend_id);
    const tag = ctx.request.body.tag;
    // 2. 判断添加标签的对象不能是自己
    if (friend_id === id) {
      ctx.throw(400, '不能添加自己的标签');
    }
    // 3. 判断标签是否已经存在
    const find = await app.model.Tag.findOne({
      where: {
        name: tag,
        user_id: id,
        friend_id
      }
    });
    if (find) {
      ctx.throw(400, '标签已存在');
    }
    // 4. 操作数据库
    const result = await app.model.Tag.create({
      name: tag,
      user_id: id,
      friend_id
    });
    if (!result) {
      ctx.throw(400, '操作失败');
    }
    ctx.success(result);
  }
  async tagDel() { // 删除自己添加的标签
    // 1.参数获取
    const { ctx, app } = this;
    const id = ctx.authUser.id;
    const tag_id = ctx.params.id;

    // 2. 操作数据库
    const result = await app.model.Tag.destroy({
      where: {
        id: tag_id,
        user_id: id
      }
    });
    if (!result) {
      ctx.throw(400, '标签不存在');
    }
    ctx.success('删除成功');
  }
  async tagDelFriend() { // 删除指定好友的标签
    // 1. 参数获取
    const { ctx, app } = this;
    const tag_id = ctx.params.tag_id;
    // 2. 操作数据库
    const result = await app.model.Tag.destroy({
      where: {
        id: tag_id,
      }
    });
    if (!result) {
      ctx.throw(400, '操作失败');
    }
    ctx.success('删除成功');
  }
  async getFriendTagList() { // 获得指定好友的标签
    // 1. 参数获取
    const { ctx, app } = this;
    const id = ctx.authUser.id;
    const friend_id = ctx.params.f_id;
    // 2. 操作数据库
    const result = await app.model.Tag.findAll({
      where: {
        user_id: id,
        friend_id
      }
    });
    ctx.success(result);
  }
}

module.exports = TagController;
